package com.yl.users.services

import com.baomidou.mybatisplus.extension.plugins.pagination.Page
import com.yl.common.UserType
import com.yl.common.control.ResponseBody
import com.yl.users.entity.*
import com.yl.users.pojo.vo.CompanyDeptSelectVo
import com.yl.users.pojo.vo.CompanyRoleSelectVo
import com.yl.users.pojo.vo.CompanyUserSelectVo

interface ISysCompanyService {


	//公司处理
	/**
	 * 修改
	 */
	fun updateCompany(sysCompany: SysCompany): ResponseBody

	/**
	 * 查询详情(基础信息)
	 */
	fun getCompanyDetail(id: Long): SysCompany?

	/**
	 * 删除(目前只做逻辑删除)
	 */
	fun delCompany(id: Long): ResponseBody

	/**
	 * 添加一个基本用户
	 */
	fun addUser(companyUser: CompanyUser): ResponseBody

	/**
	 * 获取管理员用户
	 * @param companyId
	 * @return
	 */
	fun getAdminUser(companyId: Long): CompanyUser?

	/**
	 * 获取公司员工列表
	 */
	fun getCompanyUserList(companyUser: CompanyUserSelectVo): List<CompanyUser>

	/**
	 * 获取公司员工分页
	 */
	fun getCompanyUserPage(page: Page<CompanyUser>, companyUser: CompanyUserSelectVo): Page<CompanyUser>

	/**
	 * 添加一个公司分部
	 */
	fun addSubCompany(dept: CompanyDept): ResponseBody

	/**
	 * 获取分院列表
	 */
	fun getSubCompanyList(companyId: Long): MutableList<CompanyDept>

	/**
	 * 获取公司部门列表
	 */
	fun getCompanyDeptList(companyDept: CompanyDeptSelectVo): MutableList<CompanyDept>

	/**
	 * 获取公司部门列表
	 */
	fun getCompanyDeptPage(page: Page<CompanyDept>, companyDept: CompanyDeptSelectVo): Page<CompanyDept>


	/**
	 * 获取公司管理员角色
	 */
	fun getCompanyAdminRole(companyId: Long): CompanyRole?

	/**
	 * 获取公司角色列表
	 */
	fun getCompanyRoleList(vo: CompanyRoleSelectVo): MutableList<CompanyRole>

	/**
	 * 获取公司角色分页
	 */
	fun getCompanyRolePage(page: Page<CompanyRole>, companyRole: CompanyRoleSelectVo): Page<CompanyRole>

	/**
	 * 添加角色信息（只有信息不包含授权）
	 */
	fun addCompanyRole(companyRole: CompanyRole): ResponseBody


	/**
	 * 获取公司有的系统权限id
	 */
	fun getCompanySystemPermId(companyId: Long): List<Long>

	/**
	 * 获取自己的菜单目录权限
	 */
	fun getCompanyPermViewList(companyId: Long): MutableList<CompanyPermissionsView>

	/**
	 * 获取自己的菜单目录权限
	 */
	fun getCompanyPermCodeList(companyId: Long): MutableList<CompanyPermissionsView>


	/**
	 * 获取目录和菜单列表
	 */
	fun getCompanyPermViewDirectoryMenuList(companyId: Long): MutableList<CompanyPermissionsView>

	/**
	 * 获取目录树列表
	 */
	fun getCompanyPermViewDirectoryList(companyId: Long): MutableList<CompanyPermissionsView>

	/**
	 * 添加公司的权限
	 */
	fun addCompanyPermViewByCompany(companyPermissionsView: CompanyPermissionsView): ResponseBody


	/**
	 * 给出当前企业可以使用的发送消息的列表
	 */
	fun getSendMessageNames(userType: UserType, companyId: Long?): List<String>


	/**
	 * 获取最上层部门
	 */
	fun getTopDept(companyId: Long): CompanyDept

	/**
	 * 添加最上层部门
	 */
	fun addDefaultTopDept(companyId: Long): ResponseBody

	/**
	 * 绑定权限(会把之前的清除)
	 */
	fun reBindPermToCompany(companyId: Long, permIds: List<Long>): ResponseBody

	/**
	 * 获取字段权限id
	 */
	fun getCompanyFieldId(companyId: Long): List<Long>

	/**
	 * 获取公司所有的字段权限菜单
	 */
	fun getCompanyFieldTree(companyId: Long): List<SysTableFieldPerm>

	/**
	 * 给公司绑定字段权限  会先清除之前的，再添加
	 */
	fun reBindFieldToCompany(companyId: Long, ids: List<Long>)

}
